package main

import (
	"fmt"
	"log"
	"os"
	"path/filepath"

	"mcp-server/internal/metadata"
)

func main() {
	// 创建测试文档
	testContent := `# 中文文档元数据提取测试

作者：张三

## 概述

本文档用于测试中文文档的元数据提取功能，包括标题、作者、摘要、关键词等信息的自动识别和提取。

## 主要功能

### 1. 标题提取
系统能够自动识别文档中的各级标题，包括Markdown格式的标题和中文章节标题。

### 2. 作者识别
通过模式匹配识别文档中的作者信息，支持多种格式的作者标注。

### 3. 摘要生成
基于文档内容自动生成摘要，采用抽取式摘要算法，选择最重要的句子组成摘要。

### 4. 关键词提取
使用TF-IDF算法提取文档的关键词，帮助用户快速了解文档主题。

## 技术特点

- 支持中文文档处理
- 智能语义分析
- 高质量元数据提取
- 可配置的提取参数

## 应用场景

本功能适用于知识库管理、文档检索、内容分析等多种场景，能够显著提高文档管理的效率和准确性。

## 结论

通过本测试文档，我们可以验证元数据提取功能的准确性和完整性，为后续的向量化和检索功能提供高质量的元数据支持。`

	// 创建临时文件
	tmpDir := "temp_metadata_test"
	os.MkdirAll(tmpDir, 0755)
	defer os.RemoveAll(tmpDir)

	testFile := filepath.Join(tmpDir, "test_document.md")
	err := os.WriteFile(testFile, []byte(testContent), 0644)
	if err != nil {
		log.Fatalf("创建测试文件失败: %v", err)
	}

	// 创建元数据管理器
	storageDir := filepath.Join(tmpDir, "metadata_storage")
	manager := metadata.NewDefaultManager(storageDir)

	fmt.Println("=== 中文文档元数据提取演示 ===\n")

	// 处理文档
	fmt.Println("正在处理文档...")
	docMetadata, err := manager.ProcessFile(testFile)
	if err != nil {
		log.Fatalf("处理文档失败: %v", err)
	}

	// 显示提取结果
	fmt.Printf("文档标题: %s\n", docMetadata.Title)
	fmt.Printf("作者: %s\n", docMetadata.Author)
	fmt.Printf("语言: %s\n", docMetadata.Language)
	fmt.Printf("编码: %s\n", docMetadata.Encoding)
	fmt.Printf("字数统计: %d\n", docMetadata.WordCount)
	fmt.Printf("行数统计: %d\n", docMetadata.LineCount)
	fmt.Printf("文档分类: %s\n", docMetadata.Category)
	fmt.Printf("质量评分: %.2f\n", docMetadata.Quality)
	fmt.Printf("置信度: %.2f\n", docMetadata.Confidence)

	fmt.Printf("\n标题列表 (%d个):\n", len(docMetadata.Headings))
	for i, heading := range docMetadata.Headings {
		fmt.Printf("  %d. %s\n", i+1, heading)
	}

	fmt.Printf("\n关键词 (%d个):\n", len(docMetadata.Keywords))
	for i, keyword := range docMetadata.Keywords {
		fmt.Printf("  %d. %s\n", i+1, keyword)
	}

	fmt.Printf("\n自动摘要:\n%s\n", docMetadata.Summary)

	// 测试搜索功能
	fmt.Println("\n=== 搜索功能测试 ===")
	searchCriteria := map[string]interface{}{
		"author": "张三",
	}

	searchResults, err := manager.SearchByMetadata(searchCriteria)
	if err != nil {
		log.Printf("搜索失败: %v", err)
	} else {
		fmt.Printf("找到 %d 个匹配的文档\n", len(searchResults))
	}

	// 获取统计信息
	fmt.Println("\n=== 统计信息 ===")
	stats, err := manager.GetStatistics()
	if err != nil {
		log.Printf("获取统计信息失败: %v", err)
	} else {
		fmt.Printf("总文件数: %v\n", stats["total_files"])
		fmt.Printf("总字数: %v\n", stats["total_words"])
		fmt.Printf("平均质量评分: %.2f\n", stats["average_quality"])
		fmt.Printf("平均置信度: %.2f\n", stats["average_confidence"])
	}

	fmt.Println("\n=== 演示完成 ===")
}
